package tool

import "math"

type Paginator struct {
	Page     int         `json:"page,omitempty"`      // 当前页码
	PageSize int         `json:"page_size,omitempty"` // 每页数据数量
	Total    int64       `json:"total,omitempty"`     // 总数据数量
	Data     interface{} `json:"data,omitempty"`      // 数据
}

// Offset 返回分页偏移量
func (p *Paginator) Offset() int {
	return (p.Page - 1) * p.PageSize
}

// TotalPages 返回总页数
func (p *Paginator) TotalPages() int {
	return int(math.Ceil(float64(p.Total) / float64(p.PageSize)))
}

// HasPrev 是否有前一页
func (p *Paginator) HasPrev() bool {
	return p.Page > 1
}

// HasNext 是否有后一页
func (p *Paginator) HasNext() bool {
	return p.Page < p.TotalPages()
}

// PrevPage 返回前一页页码
func (p *Paginator) PrevPage() int {
	if p.HasPrev() {
		return p.Page - 1
	}
	return p.Page
}

// NextPage 返回后一页页码
func (p *Paginator) NextPage() int {
	if p.HasNext() {
		return p.Page + 1
	}
	return p.Page
}

/*
func GetUsers(page, pageSize int) (*Paginator, error) {
	var (
		users []User
		total int
	)

	// 查询当前页的数据
	if err := db.Offset(pageOffset).Limit(pageSize).Find(&users).Count(&total).Error; err != nil {
		return nil, err
	}

	// 返回分页结果
	return &Paginator{
		Page:     page,
		PageSize: pageSize,
		Total:    total,
		Data:     users,
	}, nil
}
*/
